public class MyLinkedList{
    class Node {
        public int val;
        public Node next;
        public Node (int val) {
            this.val = val;
        }
    }
    public Node head;
    public Node last;
    public int usedSize;

    //读入队列
    public void offer(int val) {
        Node node = new Node(val) ;//新建一个节点
        //判断是否为空 为空就将其设为第一个元素
        if (head == null) {
            head = node;
            last = node;
        } else {//不为空就在后面添加 因为队列是先进先出
            last.next = node;
            last = node;
        }
        usedSize ++;//数目加一
    }
    //这是弹出
    public int poll() {
        if (isEmpty()) {
            throw new RuntimeException("队列为空");//抛出异常
        }
        //不为空进来 将第一个元素读入
        int val = head.val;
        head = head.next;//丢出
        if (head== null) {//再额外判断一下last 假如只有一个节点的话 我们就需要吧last置为空 不然会发生异常
            last = null;
        }
        usedSize --;//弹出减一
        return val;
    }

    public boolean isEmpty(){
        return usedSize == 0;//直接判断是不是0就行 程序会把你去判断然后返回true和 false;
    }

    //显示出队列的第一个元素
    public int peek() {
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        return head.val;
    }

    public int size() {
        return usedSize;
    }
}